home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Games / Arashi 1.1.1 / source code / For your think c folder / VA Kit ƒ / VAEraseLines.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-09-09  |  6.5 KB  |  266 lines  |  [TEXT/KAHL]

  1. /*/
  2.      Project Arashi: VAEraseLines.c
  3.      Major release: Version 1.1d2, 9/5/95
  4.  
  5.      Last modification: Wednesday, September 9, 1992, 21:41
  6.      Created: Thursday, February 9, 1989, 20:14
  7.  
  8.      Copyright © 1989-1992, Juri Munkki
  9. /*/
  10.  
  11. #include "VA.h"
  12. #include "VAInternal.h"
  13.  
  14. int        mask;
  15.  
  16. void    VAEraseBufferedLines(count,lines)
  17. int        count;
  18. Rect    *lines;
  19. {
  20.     mask=(7<<5)>>VA.offset;
  21.     
  22. asm    {
  23.     movem.l    D3-D7/A2,-(sp)
  24.  
  25.     move.l    lines,A2
  26.     sub.w    #1,count
  27.     bmi        @exitreally
  28. @bigloop
  29.     move.w    (A2)+,D2    ;    Y1 to D2
  30.     move.w    (A2)+,D0    ;    X1 to D0
  31.     move.w    (A2)+,D3    ;    Y2 to D3
  32.     move.w    (A2)+,D1    ;    X2 to D0
  33.  
  34.     cmp.w    D1,D0        ;    Is X1<X2
  35.     blt.s    @right        ;    Yes
  36.     exg.l    D0,D1        ;    Swap X1 and X2
  37.     exg.l    D2,D3        ;    Swap Y1 and Y2
  38. @right
  39.  
  40.     move.w    D1,D6
  41.     sub.w    D0,D6        ;    DeltaX to D6
  42.  
  43.     move.w    D3,D7
  44.     sub.w    D2,D7        ;    DeltaY to D7
  45.     bpl.s    @delta2
  46.     neg.w    D7            ;    Abs DeltaY
  47. @delta2
  48.     move.w    VA.row,D4    ;    VA.row into D4
  49.     move.l    VA.quickrow,A1        ;    Pointer to base address table
  50.     move.l    (0,A1,D2.w*4),A0    ;    Get pointer to row base
  51.     add.w    D0,A0        ;    Add X1 to base address
  52.     
  53.     move.l    (0,A1,D3.w*4),A1
  54.     add.w    D1,A1
  55.  
  56.     cmp.w    D3,D2        ;    is Y1<Y2
  57.     blt.s    @down        ;    Yes, direction is down
  58.     neg.w    D4            ;    No, direction is up
  59. @down    
  60.     move.w    mask,D0
  61.  
  62.     cmp.w    D6,D7        ;    is DeltaY>=DeltaX?
  63.     bge        @vertigo    ;    Yes, jump
  64.  
  65.     move.w    D6,D2        ;    ErrorAcc=DeltaX
  66.     asr.w    #1,D2        ;    ErrorAcc=DeltaX/2
  67.     addq.l    #1,A1
  68.     move.w    D2,D3        ;    DeltaX/2 is loop counter
  69. @xplot
  70.     subq.w    #8,D3        ;    Subtract 8 from loopcount
  71.     bmi.s    @xshort        ;    Should we fall out?
  72.  
  73.     or.b    D0,(A0)+    ;    Write out pattern
  74.     or.b    D0,-(A1)
  75.     sub.w    D7,D2        ;    ErrorAcc-=DeltaY
  76.     bpl.s    @xnext1        ;    No acc overflow
  77.     add.w    D4,A0        ;    Move RowBase to next line
  78.     sub.w    D4,A1
  79.     add.w    D6,D2        ;    Acc overflow. ErrorAcc+=DeltaX
  80. @xnext1
  81.     or.b    D0,(A0)+    ;    Write out pattern
  82.     or.b    D0,-(A1)
  83.     sub.w    D7,D2        ;    ErrorAcc-=DeltaY
  84.     bpl.s    @xnext2        ;    No acc overflow
  85.     add.w    D4,A0        ;    Move RowBase to next line
  86.     sub.w    D4,A1
  87.     add.w    D6,D2        ;    Acc overflow. ErrorAcc+=DeltaX
  88. @xnext2
  89.     or.b    D0,(A0)+    ;    Write out pattern
  90.     or.b    D0,-(A1)
  91.     sub.w    D7,D2        ;    ErrorAcc-=DeltaY
  92.     bpl.s    @xnext3        ;    No acc overflow
  93.     add.w    D4,A0        ;    Move RowBase to next line
  94.     sub.w    D4,A1
  95.     add.w    D6,D2        ;    Acc overflow. ErrorAcc+=DeltaX
  96. @xnext3
  97.     or.b    D0,(A0)+    ;    Write out pattern
  98.     or.b    D0,-(A1)
  99.     sub.w    D7,D2        ;    ErrorAcc-=DeltaY
  100.     bpl.s    @xnext4        ;    No acc overflow
  101.     add.w    D4,A0        ;    Move RowBase to next line
  102.     sub.w    D4,A1
  103.     add.w    D6,D2        ;    Acc overflow. ErrorAcc+=DeltaX
  104. @xnext4
  105.     or.b    D0,(A0)+    ;    Write out pattern
  106.     or.b    D0,-(A1)
  107.     sub.w    D7,D2        ;    ErrorAcc-=DeltaY
  108.     bpl.s    @xnext5        ;    No acc overflow
  109.     add.w    D4,A0        ;    Move RowBase to next line
  110.     sub.w    D4,A1
  111.     add.w    D6,D2        ;    Acc overflow. ErrorAcc+=DeltaX
  112. @xnext5
  113.     or.b    D0,(A0)+    ;    Write out pattern
  114.     or.b    D0,-(A1)
  115.     sub.w    D7,D2        ;    ErrorAcc-=DeltaY
  116.     bpl.s    @xnext6        ;    No acc overflow
  117.     add.w    D4,A0        ;    Move RowBase to next line
  118.     sub.w    D4,A1
  119.     add.w    D6,D2        ;    Acc overflow. ErrorAcc+=DeltaX
  120. @xnext6
  121.     or.b    D0,(A0)+    ;    Write out pattern
  122.     or.b    D0,-(A1)
  123.     sub.w    D7,D2        ;    ErrorAcc-=DeltaY
  124.     bpl.s    @xnext7        ;    No acc overflow
  125.     add.w    D4,A0        ;    Move RowBase to next line
  126.     sub.w    D4,A1
  127.     add.w    D6,D2        ;    Acc overflow. ErrorAcc+=DeltaX
  128. @xnext7
  129.     or.b    D0,(A0)+    ;    Write out pattern
  130.     or.b    D0,-(A1)
  131.     sub.w    D7,D2        ;    ErrorAcc-=DeltaY
  132.     bpl.s    @xplot        ;    No acc overflow
  133.     add.w    D4,A0        ;    Move RowBase to next line
  134.     sub.w    D4,A1
  135.     add.w    D6,D2        ;    Acc overflow. ErrorAcc+=DeltaX
  136. @xnext8
  137.     bra.s    @xplot
  138. @xshort
  139.     addq.w    #8,D3
  140. @xplot2
  141.     or.b    D0,(A0)+    ;    Write out pattern
  142.     or.b    D0,-(A1)
  143.     sub.w    D7,D2        ;    ErrorAcc-=DeltaY
  144.     bpl.s    @xnext        ;    No acc overflow
  145.     add.w    D4,A0        ;    Move RowBase to next line
  146.     sub.w    D4,A1
  147.     add.w    D6,D2        ;    Acc overflow. ErrorAcc+=DeltaX
  148. @xnext
  149.     dbra    D3,@xplot2    ;    Loop...
  150.  
  151.     or.b    D0,(A0)
  152.     bra        @exit
  153.     
  154. @vertigo
  155.     move.w    D7,D2        ;    ErrorAcc=DeltaY
  156.     asr.w    #1,D2        ;    ErrorAcc=DeltaY/2
  157.     move.w    D2,D3        ;    DeltaY is loop counter
  158. @yplot
  159.     subq.w    #8,D3
  160.     bmi        @yshort
  161.  
  162.     or.b    D0,(A0)        ;    Write out pattern
  163.     add.w    D4,A0        ;    Move RowBase to next line
  164.     or.b    D0,(A1)        ;    Write out pattern
  165.     sub.w    D4,A1
  166.     sub.w    D6,D2        ;    ErrorAcc-=DeltaX
  167.     bpl.s    @ynext1        ;    No acc overflow
  168.     add.w    D7,D2        ;    Acc overflow. ErrorAcc+=DeltaY
  169.     addq.l    #1,A0        ;    Advance to next x pixel
  170.     subq.l    #1,A1
  171. @ynext1
  172.     or.b    D0,(A0)        ;    Write out pattern
  173.     add.w    D4,A0        ;    Move RowBase to next line
  174.     or.b    D0,(A1)        ;    Write out pattern
  175.     sub.w    D4,A1
  176.     sub.w    D6,D2        ;    ErrorAcc-=DeltaX
  177.     bpl.s    @ynext2        ;    No acc overflow
  178.     add.w    D7,D2        ;    Acc overflow. ErrorAcc+=DeltaY
  179.     addq.l    #1,A0        ;    Advance to next x pixel
  180.     subq.l    #1,A1
  181. @ynext2
  182.     or.b    D0,(A0)        ;    Write out pattern
  183.     add.w    D4,A0        ;    Move RowBase to next line
  184.     or.b    D0,(A1)        ;    Write out pattern
  185.     sub.w    D4,A1
  186.     sub.w    D6,D2        ;    ErrorAcc-=DeltaX
  187.     bpl.s    @ynext3        ;    No acc overflow
  188.     add.w    D7,D2        ;    Acc overflow. ErrorAcc+=DeltaY
  189.     addq.l    #1,A0        ;    Advance to next x pixel
  190.     subq.l    #1,A1
  191. @ynext3
  192.     or.b    D0,(A0)        ;    Write out pattern
  193.     add.w    D4,A0        ;    Move RowBase to next line
  194.     or.b    D0,(A1)        ;    Write out pattern
  195.     sub.w    D4,A1
  196.     sub.w    D6,D2        ;    ErrorAcc-=DeltaX
  197.     bpl.s    @ynext4        ;    No acc overflow
  198.     add.w    D7,D2        ;    Acc overflow. ErrorAcc+=DeltaY
  199.     addq.l    #1,A0        ;    Advance to next x pixel
  200.     subq.l    #1,A1
  201. @ynext4
  202.     or.b    D0,(A0)        ;    Write out pattern
  203.     add.w    D4,A0        ;    Move RowBase to next line
  204.     or.b    D0,(A1)        ;    Write out pattern
  205.     sub.w    D4,A1
  206.     sub.w    D6,D2        ;    ErrorAcc-=DeltaX
  207.     bpl.s    @ynext5        ;    No acc overflow
  208.     add.w    D7,D2        ;    Acc overflow. ErrorAcc+=DeltaY
  209.     addq.l    #1,A0        ;    Advance to next x pixel
  210.     subq.l    #1,A1
  211. @ynext5
  212.     or.b    D0,(A0)        ;    Write out pattern
  213.     add.w    D4,A0        ;    Move RowBase to next line
  214.     or.b    D0,(A1)        ;    Write out pattern
  215.     sub.w    D4,A1
  216.     sub.w    D6,D2        ;    ErrorAcc-=DeltaX
  217.     bpl.s    @ynext6        ;    No acc overflow
  218.     add.w    D7,D2        ;    Acc overflow. ErrorAcc+=DeltaY
  219.     addq.l    #1,A0        ;    Advance to next x pixel
  220.     subq.l    #1,A1
  221. @ynext6
  222.     or.b    D0,(A0)        ;    Write out pattern
  223.     add.w    D4,A0        ;    Move RowBase to next line
  224.     or.b    D0,(A1)        ;    Write out pattern
  225.     sub.w    D4,A1
  226.     sub.w    D6,D2        ;    ErrorAcc-=DeltaX
  227.     bpl.s    @ynext7        ;    No acc overflow
  228.     add.w    D7,D2        ;    Acc overflow. ErrorAcc+=DeltaY
  229.     addq.l    #1,A0        ;    Advance to next x pixel
  230.     subq.l    #1,A1
  231. @ynext7
  232.     or.b    D0,(A0)        ;    Write out pattern
  233.     add.w    D4,A0        ;    Move RowBase to next line
  234.     or.b    D0,(A1)        ;    Write out pattern
  235.     sub.w    D4,A1
  236.     sub.w    D6,D2        ;    ErrorAcc-=DeltaX
  237.     bpl        @yplot        ;    No acc overflow
  238.     add.w    D7,D2        ;    Acc overflow. ErrorAcc+=DeltaY
  239.     addq.l    #1,A0        ;    Advance to next x pixel
  240.     subq.l    #1,A1
  241.  
  242.     bra        @yplot
  243. @dot
  244.     bra.s    @exit
  245. @yshort
  246.     addq.l    #8,D3
  247. @yplot2
  248.     or.b    D0,(A0)        ;    Write out pattern
  249.     add.w    D4,A0        ;    Move RowBase to next line
  250.     or.b    D0,(A1)        ;    Write out pattern
  251.     sub.w    D4,A1
  252.     sub.w    D6,D2        ;    ErrorAcc-=DeltaX
  253.     bpl.s    @ynext        ;    No acc overflow
  254.     add.w    D7,D2        ;    Acc overflow. ErrorAcc+=DeltaY
  255.     addq.l    #1,A0        ;    Advance to next x pixel
  256.     subq.l    #1,A1
  257. @ynext
  258.     dbra    D3,@yplot2    ;    Loop...
  259.  
  260. @exit
  261.     sub.w    #1,count
  262.     bpl        @bigloop
  263. @exitreally
  264.     movem.l    (sp)+,D3-D7/A2
  265.     }
  266. }